A microprocessor (sometimes abbreviated as μp) is a digital electronic component with miniaturized transistors on a single semiconductor integrated circuit (IC). One or more microprocessors typically serve as a central processing unit (CPU) in a computer system or, more recently, in a handheld communication or computing device. Microprocessors are widely used with data registers and memory elements, to enable program code running on the microprocessor to access data contained therein. In order to access data contained within the register or memory element, each register/element is allocated a unique address.
One of the most important applications for addressing a data element in a microprocessor architecture is to process lists or arrays of data in a loop, where each pass of the loop uses a different set of stored data. The benefit of such loops is that the same section of program code, that is code within the loop, can be used to process the different data sets.
Data operands in microprocessor architectures are contained either in one or more microprocessor registers or in memories that can be accessed by the microprocessor. Most microprocessors have variants of indirect addressing with an auto-increment and/or decrement function. However, the microprocessor typically also has a variant with no change of the indirect address. It is, of course, the auto-increment/decrement modes, that are most useful for arrays-of-data processing in loops. Indirect addressing means, that the data operand address is contained in a register of the processor, typically called an address or pointer register.
However, it is known that in order to access a central processing unit's (CPU) internal registers an absolute identification (in, say, the form of one or more of a register number, name, etc.) must be specified. Such absolute identifications are contained in instruction words. With absolute addressing, program parts that perform the same operation on multiple data objects can not be implemented as program loops. Loops need to be unrolled, which leads to higher instruction memory space requirements. Unrolling a loop means that the inner code of the loop is replicated (copied) for each iteration of the loop. In microprocessor architectures, where only absolute register addressing is available, it is not possible to implement program loops that access different registers in each pass of the loop.
Furthermore, if the different data sets are not contained in memory, but are contained in the processor's registers, the loop concept can not be used, as most microprocessor architectures do not employ indirect addressing capability for their ‘internal’ registers.
In particular, modern reduced instruction set code (RISC) processors and digital signal processors (DSPs) have large arrays of general purpose registers. Many algorithms are able to benefit from the ability to process lists or arrays of operands in the processor's registers by means of loops.
However, with absolute register addressing only, the code segment has to be duplicated for each set of operands, which results in poorer code density and more complex software development.
A possible solution would be to add indirect addressing, as with memory operands, for the internal registers of the processor. However, this would require address/pointer registers that point to general purpose registers in the main register list or array. Furthermore, these extra address/pointer registers would invariably complicate the processor's programming model and tools.
Thus, a need exists for an improved microprocessor architecture and method for addressing therein.